FLASH608K: GW1NR-9のUser Flash
列メモリユニットの容量:32ビット
行メモリユニットの容量:64列メモリユニット(64*32=2048ビット=256バイト)
ページの容量:8行(2048バイト)
容量:304 行*64 列*32 ビット = 608 K ビット
ページ消去をサポート
FLASH608Kのポート
https://gyazo.com/d927900ce5baa24d1f591af8c45380c9
UG295J p.27より
データ入出力は32ビット(1列)単位で行う
XADR[8:0]:行選択
9ビットなので0~511だが、このうち0~303が有効?
XADR[8:3]:ページ選択(6ビット、0~63)
XADR[2:0]:ページ内行選択(3ビット、0~7)
YADR[5:0]:列選択
6ビットなので0~63
table:操作モード
モード XE YE SE PROG ERASE NVSTR
読み出し 1 1 1 0 0 0
書き込み 1 1 0 1 0 1
ページ消去 1 0 0 0 1 1
FLASH608Kの動作タイミング
読み出し
0. 初期値:XE=0 & YE=0 & SE=0
1. XADRとYADRを確定 & XE=1 & YE=1
2. Tas=0.1ns以上待ち、SE=1
3. Tpws=5ns以上待ち、SE=0
4. SE=1からTacc=25ns待てばDOUTからデータが読める
5. 読み終わったらXE=0 & YE=0 としてよい
6. 連続読み出しでは、SE=0の後SE=1にするまでTnws=2ns以上待つ必要がある
27MHzクロックだと37ns周期なので、1クロック毎に状態遷移で事足りそう
1クロック目:XADRとYADRを確定 & XE=1 & YE=1
2クロック目:SE=1
3クロック目:SE=0 & DOUTから読む
4クロック目:XE=0 & YE=0
読み出しは行列アドレスを自由に変えてもレイテンシは不変
書き込み
0. 初期値:SE=1 & ERASE=1 & XE=0 & YE=1 & PROG=0 & NVSTR=0
1. SE=0 & ERASE=0 & YE=0 & XADRを確定 & XE=1
2. Twpr=0ns以上待ち、PROG=1
3. Tnvs=5μs以上待ち、NVSTR=1 & YADRとDINを変化、確定
4. NVSTR=1からTpgs=10μs以上待ち、YE=1
YADR確定からTads=20ns以上後でYE=1とする必要がある
5. Tprog=8μs~16μs待ち、YE=0
6. Tadh=20ns以上待ち、YADRとDINを変化、確定
7. Tads=20ns以上待ち、YE=1
8. Tprog=8μs~16μs待ち、YE=0
9. Tpgh=20ns以上待ち、PROG=0
10. Tnvh=5μs以上待ち、NVSTR=0
11. Twhd=0ns以上待ち、XE=0
12. 次の行書き込みまでTrcv=10μs以上待つ
27MHzクロックの場合のタイミング
1クロック目:SE=0 & ERASE=0 & YE=0 & XADRを確定 & XE=1
2クロック目:PROG=1
5μs待ち
1クロック目:NVSTR=1 & YADRとDINを変化、確定
10μs待ち
1クロック目:YE=1
8μs~16μs待ち
1クロック目:YE=0
2クロック目:YADRとDINを変化、確定
3クロック目:YE=1
8μs~16μs待ち
1クロック目:YE=0
必要な分だけ以下を繰り返す
2クロック目:YADRとDINを変化、確定
3クロック目:YE=1
8μs~16μs待ち
1クロック目:YE=0
2クロック目:PROG=0
5μs待ち
1クロック目:NVSTR=0
2クロック目:XE=0
10μs待ち
書き込みは同一行内では連続で書き込め、異なる行の場合はTrcvだけ待つ必要がある
ページ消去
1. YE=0 & SE=0 & ERASE=0 & NVSTR=0 & XADRを確定 & XE=1
2. Twpr=0ns以上待ち、ERASE=1
3. Tnvs=5μs以上待ち、NVSTR=1
4. Terase=100ms~120ms待ち、ERASE=0
5. Tnvh=5μs以上待ち、NVSTR=0
6. Twhd=0ns以上待ち、XE=0
7. 次のページ消去までTrcv=10μs以上待つ